//给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。 
//
// 说明：本题中，我们将空字符串定义为有效的回文串。 
//
// 示例 1: 
//
// 输入: "A man, a plan, a canal: Panama"
//输出: true
// 
//
// 示例 2: 
//
// 输入: "race a car"
//输出: false
// 
// Related Topics 双指针 字符串 
// 👍 284 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean isPalindrome(String s) {
        char[] str = s.toCharArray();
        int length = str.length;
        if (!s.equals("") && s!=null){
            int head = 0,tail = length-1;
            for (int i = 0; head < tail; i++) {
                if (isLegal(str[head]) && isLegal(str[tail])){
                    if (!(str[head]+"").equalsIgnoreCase(str[tail]+""))
                        return false;
                    else{
                        head++;
                        tail--;
                    }
                }else{
                    if (!isLegal(str[head])){
                        head++;
                    }
                    if (!isLegal(str[tail])){
                        tail--;
                    }
                }
            }
            return true;
        }
        return true;
    }

    public boolean isLegal(char str){
        if (('A' <= str && str<='Z') || ('a' <= str && str<='z') || ('0' <= str && str<='9'))
            return true;
        else
            return false;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
